#ifndef MOTIONPLANNING_H
#define MOTIONPLANNING_H

// Forward declaration of C-type PyObject
struct _object;
typedef _object PyObject;

void setRandomSeed(int seed);
void setPlanType(const char* type);
void setPlanSetting(const char* setting,double value);
void destroy();

class CSpaceInterface
{
 public:
  CSpaceInterface();
  CSpaceInterface(const CSpaceInterface&);  //copy constructor
  ~CSpaceInterface();
  void destroy();
  void setFeasibility(PyObject* pyFeas);
  void setVisibility(PyObject* pyVisible);
  void setVisibilityEpsilon(double eps);
  void setSampler(PyObject* pySamp);
  void setNeighborhoodSampler(PyObject* pySamp);
  void setDistance(PyObject* pyDist);
  void setInterpolate(PyObject* pyInterp);

  int index;
};

class PlannerInterface
{
 public:
  PlannerInterface(const CSpaceInterface& cspace);
  ~PlannerInterface();
  void destroy();
  bool setEndpoints(PyObject* start,PyObject* goal);
  int addMilestone(PyObject* milestone);
  void planMore(int iterations);
  PyObject* getPathEndpoints();
  PyObject* getPath(int milestone1,int milestone2);
  double getData(const char* setting);
  void dump(const char* fn);

  int index;
};

#endif
